Skip to content

[toc]

1、系统配置

本章主要介绍对原生操作系统的配置和优化,基本不依赖其它第三方软件。

第一节主要通过 default writes 命令来修改系统的配置,让键盘,触摸板等硬件用起来更加得心应手。以及一些常用的软件方面的优化。

第二节介绍很简单,但是大部分人不知道的快捷键使用,比如 Option 键和 Ctrl 键的用法, 帮助读者快速移动光标和编辑文字。

第三节介绍如何增强系统自带的预览程序的功能,支持更好的显示效果和更多文件格式。这样就可以在不打开文件的前提下快速浏览了。

第四节主要介绍对 Dock 栏的优化方案,还读者一个干净整洁,而且不打扰人的工作环境

1.1 系统配置优化

大小写键和 Ctrl 键交换

首先说两个我的主观看法,当然读者可以选择不接受,那样就不用浪费时间读下去了。如果你表示认可,并且希望解决这个问题,相信本文会帮到你。

  1. 用 Caps Lock(也就是大小写切换键)来切换大小写是非常低效的。以输入文字 aBc 为例,我们需要按下 Caps Lock 键进入大写模式,输入 B,再按一次键回到小写模式,输入 c。正确的做法是使用 shift 键,我们按住 shift 键输入 b 就会得到大写的字母,再松开就回到了小写模式。和 Caps Lock 键相比,少了一次按键
  2. 键盘上的 Ctrl 键位置很差,如果你是用标准的打字手势,你会发现这个键刚好在左手的手心,无论哪个手指都不方便去按它。而 Caps Lock 键则占据了左手小拇指左侧的黄金位置。更重要的是,Ctrl 键的用途非常广,无论是作为 Vim 或者 Emacs 的功能键,还是各种快捷键的修饰键,都是一个非常常用的按键,比如在下一章中就会介绍 Ctrl 键的妙用。

简单总结一下就是:

  1. Caps Lock 键效率低,自身毫无用处
  2. Caps Lock 键占据了黄金的位置
  3. Ctrl 键用处多,使用频率高
  4. Ctrl 键位置差,很不方便按

当这四个理由合在一起时,你很难否认,最好的做法就是:交换 Caps Lock 键和 Ctrl 键。实际上系统的键盘设置里面已经支持了这个操作,但本文会从命令行的角度来聊聊,这样可以方便我们快速搭建 Mac 的工作环境

踩了无数坑以后,终于发现了一个可用的脚本,原理啥的就不说了,因为基本上没有别的用途:

Plaintext
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x7000000E0},{"HIDKeyboardModifierMappingSrc":0x7000000E0,"HIDKeyboardModifierMappingDst":0x700000039}]}'

不过这个脚本有一个大坑,就是虽然立刻就会生效,但是重启后就失效了,所以我们需要在每次启动时都执行一次这个命令。

添加开机任务

很多程序的设置中都可以选择是否开机自动启动,其实除了启动 App,我们可以编写自己的 shell 脚本,并将它设置为启动时自动执行,这样就获得了更大的灵活性,可以完成任何自己想做的操作。

首先我们需要一个配置文件,先给它随便去个名字,比如叫做 com.bestswifter.onlogin.plist。内容如下所示,虽然很多,但绝大多数地方都是模板,我们只需要修改其中一处即可:

Plaintext
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>Label</key>
    <string>com.bestswifter.onlogin</string>
    <key>ProgramArguments</key>
    <array>
        <string>zsh</string>
        <string>-c</string>
        <string>"$HOME/.macbootstrap/onlogin.sh"</string>
    </array>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

注意这里的几个键,LaunchOnlyOnce表示脚本只会执行一次,否则可能会每隔 10s 就执行一次。Label是自定义的名字,理论上来说随便写,不过我建议和文件名保持一致即可,一定不会出错。

array标签里面就是自己要执行的命令了,前两行zsh -c不要动,表示用 zsh 来执行脚本,然后后面写脚本的路径。比如在这个例子里面我就把入口收敛到了自己的onlogin.sh里面,然后再执行任何事情就很方便了。

对于普通用户来说,上述 plist 文件唯一需要修改的就是执行脚本的位置了。修改后后把这个文件拷贝到 ~/Library/LaunchAgents目录下,表示仅对当前用户生效,然后执行:

Bash
sudo launchctl load ~/Library/LaunchAgents/com.bestswifter.onlogin.plist

将这个文件注册到系统中。

触摸板优化

首先可以开启轻按点击功能,这样只要轻轻的触碰触摸板,不用真的按下去,就可以点击了,这样真的很轻松:

Bash
defaults write com.apple.AppleMultitouchTrackpad Clicking -int 1
defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1

除此以外我们还可以开启三指拖拽功能,这样想移动窗口位置时,只要用三个手指即可拖拽,而不用先点击选中窗口,再拖拽:

Bash
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true
defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool true

用好 F1-F12

默认情况下,键盘最上面一排的 F1- F12 都有各自的作用,从图标上就能看出。比如 F1 和 F2 用来调节屏幕亮度,F5 和 F6 调节键盘灯亮度灯。此时他们可以被理解为特殊按键,更偏向与娱乐,而不是普通的 F1 - F12

对于工作重心在编程的码农来说,这些特殊按键有些浪费,而很多 IDE 提供的快捷键都需要 F1 - F12,尤其在断点调试时格外有用,以 Xcode 为例说明下:

  1. F6:执行下一行代码
  2. F7:跳到代码内部执行,比如当前停在一个函数上,F6 会直接执行这个函数,F7 会跳到函数内部的第一行去执行
  3. F8:跳出当前代码块,和 F7 的作用恰好相反

这里的 F6 是标准按键,需要我们同时按下键盘左下角的 fn 键和顶部的 F6 键才能触发,效率极其低下。然而,作为程序员,我们并不太需要那些花哨的娱乐功能,因此我建议在设置中把 F1 - F12 改为标准按键,如下图所示:

img

或者更高效的做法是使用命令行:

Bash
defaults write -globalDomain com.apple.keyboard.fnState -int 1

关闭第三方程序验证

有时候,或许是囊中羞涩,或许是国外厂商定价不合理,我们或多或少会下载某些破解版的应用,此时直接打开很可能被系统拒绝,或者报错:**无法打开已损坏的安装包。**我们可以通过命令行关闭这一保(限)护(制):

Bash
sudo spctl --master-disable
defaults write com.apple.LaunchServices LSQuarantine -bool false

关闭镜像验证

在打开 .dmg 格式的安装文件时,默认会先验证镜像,如果文件本身很大,验证的时间会很长,可以输入以下命令关闭验证:

Bash
defaults write com.apple.frameworks.diskimages skip-verify -bool true
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true

完全键盘控制

很多操作都会弹出系统的对话框,要求我们确认或者取消

img

如果没有开启完全键盘控制,我们只能按回车键确认,或者移动鼠标选择取消。如果开启了完全键盘控制,只要按下空格键,就相当于选中蓝色边框的按钮,也就是这里的取消键。按下 Tab 键可以在多个按钮之间切换。

完全键盘控制可以在系统的设置界面开启,也可以直接通过命令行开启:

Bash
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3

1.2 系统快捷键进阶

除了 Command + C/V 这种入门必备的快捷键,还有一些系统级的常用快捷键是有必要掌握一下的。

光标移动

这里比较推荐使用 Emacs 系的快捷键而不是传统的 Command + ←/→/Delete之类的。因为后者并不通用,比如在终端中就无法使用,而 Emacs 系的快捷键则在几乎所有系统级别的输入框内都通用。

常见的几个行级别操作有:

  1. Ctrl + A:移动到行首
  2. Ctrl + E:移动到行尾
  3. Ctrl + K:删除到行尾
  4. Ctrl + U:删除到行头
  5. Ctrl + N:移动到下一行
  6. Ctrl + P:移动到上一行

前三个命令在终端中非常常用,能大幅度提高工作效率。后两个命令则在 Vim 系列中很常见,多用于上下切换列表中的选项。

几个比较常见的字母级别操作有:

  1. Ctrl + F:向右(Forward)移动一个字母,等价于方向键 →
  2. Ctrl + B:向左(Backward)移动一个字母,等价于方向键 ←
  3. Ctrl + D:向右删除一个字母,等价于 → + Delete这个快捷键也很常用
  4. Ctrl + H:向左删除一个字母,等价于 Delete

使用 Option 键

如果觉得按字母操作太过于细粒度,按行操作又太粗粒度,那么 Option 键绝对算得上神器,因为它可以按单词操作。

  1. Option + ←:光标向左移动一个单词
  2. Option + →:光标向右移动一个单词
  3. Option + Delete:删除一个单词

使用 Shift 键

Shift 键类似于可视模式,比如在某个位置点击光标并按住 shift 键不松开,再去另一个位置点击一次,就可以选中两次点击位置之间的文本内容。

注意,shift 键可视模式还可以和 Option 键一起合用,感兴趣的读者可以自行尝试。

1.3 拓展预览程序

对于一些文本文件,按下空格键就可以调用系统的预览程序,快速浏览文件内容。但如果想获得更好的阅读体验,或支持更多类型文件的快速浏览,就需要通过插件来完成。

可以输入以下命令来安装拓展,下面会逐个介绍:

Bash
brew cask install qlcolorcode qlstephen qlmarkdown quicklook-json qlimagesize webpquicklook qlvideo provisionql quicklookapk

qlcolorcode

顾名思义,这是一个代码高亮的插件,效果如图所示:

img

qlstephen

这个插件能让我们预览没有后缀的文本文件,效果如图所示:

img

qlmarkdown

这个插件能让我们预览 markdown 文件的渲染效果:

img

quicklook-json

这个插件也很容易理解,提供对 JSON 文件的格式化和高亮支持:

img

betterzip

这个插件我没有安装,因为它需要付费,它可以预览压缩文件内部的内容,还支持自定义各种解压缩时的行为(比如解压缩后自动删除压缩包)。下图是安装前的压缩文件预览图:

img

img

qlimagesize

这个拓展可以展示图片的分辨率和大小:

img

webpquicklook

这个拓展可以让我们预览 WebP 格式的图片:

img

qlvideo

预览更多格式的视频文件:

img

provisionql

这个插件可以预览 .app 或者 .ipa 后缀的程序:

img

quicklookapk

预览安卓的 .apk文件:

img

以上就是和程序员相关的常用插件,还有一些设计师可能用到的插件,可以访问这个网址自行查看。

1.4 Dock 栏优化

我们知道 Dock 默认位于屏幕底部,而且屏幕本身是 16 : 9 的,这就导致屏幕的可视部分更加扁平。所以我的习惯是把它放在屏幕左侧(右侧也是同理),这样会使屏幕的宽高比更加自然一些。

长期展示 Dock 对并不大的屏幕空间来说是一种浪费,我们可以把它设置为自动隐藏,当鼠标滑过去以后再显示:

Bash
defaults write com.apple.dock autohide -bool true

在后面的章节中我会介绍如何快速唤起应用,所以大多数时候 Dock 栏其实是没用的,大可不必担心看不到 Dock 栏。

定制你的 Dock

同时,系统默认会添加很多程序在 Dock 中,很多程序基本上用不到(比如地图、通讯录等等),我的做法是先把它们都移除出去,对于常用的程序,再保留在 Dock 中。

为了完成上述目的,命令行看起来就不太够了,我们可以直接用 OC 来编辑对应的 plist 文件来达到目的,代码比较冗长,感兴趣的读者可以去 我的 MacBootstrap 上查看。

然后用 clang 编译源码并执行:

Bash
clang -framework Foundation path-to-file.m -o DockIconHider
./DockIconHider